/**
 * 高阶函数
 */

fun main() {

    //使用对象引用
    val num = GaoJie().test(1, 1, Add()::addNum)

    //使用匿名函数
    val add = fun(x: Int, y: Int): Int {
        return x + y
    }

    val num1 = GaoJie().test(1, 1, add)

    //使用lambda表达式
    val num2 = GaoJie().test(1, 1) { x, y ->
        x + y
    }
    println(num)
    println(num1)
    println(num2)

    testCurrying("哈哈") {
        println(it)
    }

    testCurrying("哈哈") {
        println(it)
    }
}

inline fun testCurrying(content: String, block: (String) -> Unit) {
    block(content)
}

class GaoJie {
    fun test(x: Int, y: Int, operation: (Int, Int) -> Int): Int {
        return operation(x, y)
    }

}

class Add {
    fun addNum(x: Int, y: Int): Int {
        return x + y
    }
}